'use strict';

module.exports = async (app, conf) => {
   app.fs = app.fs || {}

   if (conf.sms?.ali) {
      const Core = require('@alicloud/pop-core');

      const smsAli = async ({ phone = [], templateCode, templateParam, SignName } = {}) => {
         try {
            if (phone.length) {
               const client = new Core({
                  accessKeyId: conf.sms.ali.accessKey,
                  accessKeySecret: conf.sms.ali.accessSecret,
                  endpoint: 'http://dysmsapi.aliyuncs.com',//固定
                  apiVersion: '2017-05-25'//固定
               });
               const SendSmsRes = await client.request('SendSms', {
                  "PhoneNumbers": phone.join(','),//接收短信的手机号码。
                  "SignName": SignName,//短信签名名称。必须是已添加、并通过审核的短信签名。
                  "TemplateCode": templateCode,//短信模板ID。必须是已添加、并通过审核的短信签名；且发送国际/港澳台消息时，请使用国际/港澳台短信模版。
                  "TemplateParam": JSON.stringify(templateParam)//短信模板变量对应的实际值，JSON格式。
               }, {
                  method: 'POST'
               });
               return SendSmsRes
            }
         } catch (error) {
            throw error
         }
      }
      app.fs.smsAli = smsAli
   }

   if (conf.email) {
      const nodemailer = require('nodemailer')

      const email = async ({ email = [], title, text = '', html = '', attachments = undefined, } = {}) => {
         try {
            let transporter = nodemailer.createTransport({
               host: conf.email.host,
               port: conf.email.port,
               secure: true,
               auth: {
                  user: conf.email.address,
                  pass: conf.email.password,
               }
            });

            // send mail with defined transport object
            await transporter.sendMail({
               from: `${conf.email.name}<${conf.email.address}>`, // sender address
               to: email.join(','), // list of receivers 逗号分隔字符串
               subject: title, // Subject line
               text: text, // plain text body
               html: html, // html body
               attachments: attachments
            });
         } catch (error) {
            throw error
         }
      }
      app.fs.email = email
   }
}
